<?php
/**
 * description:用户注册,登录,激活,忘记密码等方法,基于tp5改写
 * User: blue
 * Date: 2018/3/2
 * Time: 15:41
 */
namespace app\auth\controller;

use think\Db;
use think\Request;
use think\Session;

class Login
{
    protected $model;
    protected $table;
    protected $config=[
        'send_email'=>1,//注册时是否发送激活邮件
        'table_name'=>'addons_member',//后台的数据库表名
    ];

    use \traits\controller\Jump;
    public function __construct(){

    }
    /*
     * 用户登录
     */
    public function login(Request $request){
        if($request->isPost()){
            $data=$request->param('','','strip_tags');
            $res=Db::table($this->config['table_name'])->where('mname',$data['mname'])->find();
            empty($res)&&$this->error('用户名不存在');
            $check=password_verify($data['password'],$res['password']);
            ($check)||$this->error('密码不正确','login');
            //进行session处理
            Session::set('id',$res['id']);
            Session::set('name',$res['mname']);
            Session::set('expire',time()+3600);
            $this->success('登录成功','auth/index/index');
        }
        return view();
    }
    /*
     * 判断是否用户是否登录
     */
    public function isLogin(){
        if(!Session::get('name')){
            $this->error('您没有登录','auth/login/login');
        }
        //判断登录状态是否过期
        if (isset($_SESSION['think']['expire'])){
            //如果expire时间<当前时间,删除sesion,并且登出
            if(Session::get('expire')<time()){
                Session::delete('expire');
                Session::delete('name');
                Session::delete('id');
                $this->success('用户超时','auth/login/login');
            }
            //否则,更新expire时间
            Session::set('expire',time()+3600);
        }
    }

    /**用户注销方法
     */
    public function logout(){
        Session::delete('mname');
        Session::delete('expire');
        Session::delete('id');
        $this->success('用户登出','auth/login/login');
    }

    /**用户注册方法
     * @param Request $request
     * @return \think\response\View
     */
    public function register(Request $request){
        if($request->isPost()){
            $data=$request->param('','','strip_tags,trim');
            // 密码加密可以在模型中的前置操作,或者在数组中直接进行
            $data['password']=password_hash($data['password'],PASSWORD_DEFAULT);
            $this->model->allowField(['mname','password'])->save($data);
            echo $this->model->mid;
        }
        return view();
    }
    /**忘记密码
     */
    public function forgetPWD(){

        return view();
    }
    /**发送用户注册验证,来自TP3.2需要重写
     */
    public function sendCode($id){
        $where['id']=$id;
//        生成一个唯一的随机数
        $data['email_code']=md5(uniqid());
//       把随机数写入数据库,使用查询构造器完成
        Db::table($this->config['table_name'])->where($where)->update($data);
        // $this->where($where)->setField($data);
        $url="http://localhost/oschina/Addons_Project/Addons/index.php/user/regist/emailCheck/uid/".$where['id'].'/ecode/'.$data['email_code'];
        $title="简繁中国用户注册验证";
        $toeamil=$data['user_email'];
        $content="欢迎您注册简繁中国请点击<a herf=$url target='_blank'>激活用户</a>,如果链接失效,请手动访问{$url}地址进行激活";
        return sendMail($toeamil,$title,$content);
    }

    /**用户注册邮箱验证,来自tp3.2,需要重写
     */
    public function emailCheck()
    {
        $where['id'] = input('param.uid');
        $ecode = input('param.ecode');
        $data = $this->_model->lists($where);
        if ($ecode == $data[0]['email_code']) {
            $change['email_check'] = 1;
            $change['email_code'] = '';
            $res = $this->_model->where($where)->setField($change);
            if ($res) {
                $this->success('用户激活成功', 'User/User/index');
            } else {
                $this->error('用户激活失败' . $this->_model->getError());
            }
        }
    }

}